package ar.com.algotres.tpdos.model.aviones;

import ar.com.algotres.tpdos.model.aterrizable.CaracteristicasPista;
import ar.com.algotres.tpdos.model.aterrizable.Pista;
import ar.com.algotres.tpdos.model.controlador.ITorreDeControl;
import ar.com.algotres.tpdos.model.fisica.Movimiento;
import ar.com.algotres.tpdos.model.fisica.Posicion;
import ar.com.algotres.tpdos.model.fisica.Trayectoria;
import ar.com.algotres.tpdos.model.fisica.Velocidad;
import ar.com.algotres.tpdos.views.juego.IVistaJuego;

public class AvionHelicoptero extends Avion {
	
	private static final Double PESO_AVION = 700.0;

	public AvionHelicoptero(ITorreDeControl torre, Movimiento movimiento,Posicion posicion) {
		super(torre, movimiento, posicion, caracteristicas());
	}
	
	private static CaracteristicasAvion caracteristicas() {
		return new CaracteristicasAvion(PESO_AVION);
	}

	@Override
	public boolean puedeAterrizarEnPista(Pista pista) {
		CaracteristicasPista caracteristicasPista = pista.getCaracteristicasPista();
		return getCaracteristicas().getPeso() < caracteristicasPista.getPesoMaximoAdmitido();
	}
	
	@Override
	public void actualizarMovimiento(Trayectoria trayectoria){
		actualizarMovimiento(trayectoria, new Velocidad(1));
	}
	
	@Override
	public void mover(){
		super.mover();
		if (getPosicion().equals(getMovimiento().getTrayectoria().getPosicionFinal()) && getTrayectorias().isEmpty()){
			//No me importa esta trayectoria realmente, ya que la velocidad va a ser 0
			Trayectoria nuevaTrayectoria = new Trayectoria(getFinalDeRuta(), getMovimiento().getTrayectoria().getPosicionInicial());
			actualizarMovimiento(nuevaTrayectoria, new Velocidad(0));
			if (EstadoAvion.ESPERANDO_TRAYECTORIA.equals(this.getEstado())){
				esperarMovimiento();
			}
			
		}
	}

	@Override
	public void avionCreado(IVistaJuego vistaJuego) {
		vistaJuego.avionHelicopteroCreado(this);
	}
}
